R Schnittstellen

Jan-Philipp Kolb

8 Mai 2017

Einführung und Motivation

Pluspunkte von R

Gründe

Warum R?

Modularer Aufbau

Modularer Aufbau

Nachteile von R

  1. Daten werden oft anderswo erfasst
  2. Nicht jeder ist bereit mit R zu arbeiten
  3. Nicht auf jedem Rechner ist R installiert
  4. R ist manchmal zu langsam
  5. Schwierigkeiten bei der Arbeit mit großen Datenmengen

Was folgt daraus

  1. Schnittstelle zu SPSS/Stata/Excel zum Import von Daten
  2. Schnittstelle zu Word
  3. Möglichkeit HTML Präsentationen zu erzeugen
  4. Nutzung von C++
  5. Nutzung von Datenbanken

Die Nutzung von Schnittstellen beim Import/Export

Import

Import

Reproducible Research

Was wird bei Wikipedia unter Reproducability verstanden?

Darstellung von Ergebnissen

Warum die Schnittstelle zu C++?

Die Nutzung von Datenbanken

Nutzung der Unterlagen auf GitHub

Wie wird das Github Verzeichnis genutzt?

https://github.com/Japhilko/RInterfaces

Informationen ausdrucken

Raw Button zum Download

Raw Button zum Download

Weitere Dateien herunterladen

Organisatorisches

CRAN Task Views

Aufgabe - Zusatzpakete

Gehen Sie auf https://cran.r-project.org/ und suchen Sie in dem Bereich, wo die Pakete vorgestellt werden, nach Paketen,…

Datenimport

Dateiformate in R

Formate - base package

R unterstützt von Haus aus schon einige wichtige Formate:

Datenimport leicht gemacht mit Rstudio

Import Button

Import Button

CSV aus dem Web einladen

https://data.montgomerycountymd.gov/api/views/6rqk-pdub/rows.csv?accessType=DOWNLOAD

Der Arbeitsspeicher

So findet man heraus, in welchem Verzeichnis man sich gerade befindet

getwd()

So kann man das Arbeitsverzeichnis ändern:

Man erzeugt ein Objekt in dem man den Pfad abspeichert:

main.path <- "C:/" # Beispiel für Windows
main.path <- "/users/Name/" # Beispiel für Mac
main.path <- "/home/user/" # Beispiel für Linux

Und ändert dann den Pfad mit setwd()

setwd(main.path)

Bei Windows ist es wichtig Slashs anstelle von Backslashs zu verwenden.

Alternative - Arbeitsspeicher

Das Paket readr

install.packages("readr")
library(readr)

Import von Excel-Daten

library(readr)
rows <- read_csv("https://data.montgomerycountymd.gov/api/views/6rqk-pdub/rows.csv?accessType=DOWNLOAD")

.csv-Daten aus dem Web importieren - zweites Beispiel

url <- "https://raw.githubusercontent.com/Japhilko/
GeoData/master/2015/data/whcSites.csv"

whcSites <- read.csv(url) 
head(data.frame(whcSites$name_en,whcSites$category))
##                                                      whcSites.name_en
## 1 Cultural Landscape and Archaeological Remains of the Bamiyan Valley
## 2                           Minaret and Archaeological Remains of Jam
## 3                          Historic Centres of Berat and Gjirokastra 
## 4                                                             Butrint
## 5                                             Al Qal'a of Beni Hammad
## 6                                                        M'Zab Valley
##   whcSites.category
## 1          Cultural
## 2          Cultural
## 3          Cultural
## 4          Cultural
## 5          Cultural
## 6          Cultural

Das Paket haven

install.packages("haven")
library(haven)

SPSS Dateien einlesen

install.packages("haven")
library(haven)
mtcars <- read_sav("https://github.com/Japhilko/RInterfaces/raw/master/data/mtcars.sav")

stata Dateien einlesen

library(haven)
oecd <- read_dta("https://github.com/Japhilko/IntroR/raw/master/2017/data/oecd.dta")

Datenexport

Die Exportformate von R

Beispieldatensatz erzeugen

A <- c(1,2,3,4)
B <- c("A","B","C","D")

mydata <- data.frame(A,B)

Überblick Daten Import/Export

save(mydata, file="mydata.RData")

Daten in .csv Format abspeichern

write.csv(mydata,file="mydata.csv") 
write.csv2(mydata,file="mydata.csv") 

Das Paket xlsx

library(xlsx)
write.xlsx(mydata,file="mydata.xlsx") 

Das Paket foreign

Daten in stata Format abspeichern

library(foreign)
write.dta(mydata,file="data/mydata.dta") 

Das Paket rio

install.packages("rio")

Daten als .sav abspeichern (SPSS)

library("rio")
# create file to convert

export(mtcars, "data/mtcars.sav")

Dateiformate konvertieren

export(mtcars, "data/mtcars.dta")

# convert Stata to SPSS
convert("data/mtcars.dta", "data/mtcars.sav")

R und Excel

Das Paket xlsx

library("xlsx")
dat <- read.xlsx("cult_emp_sex.xls",1)

Einige Schritte um R und Excel zu verbinden

install.packages("XLConnect")
library("XLConnect")
Vignette für XLconnect

Vignette für XLconnect

Eine Excel Datei aus R erzeugen

fileXls <- "data/newFile.xlsx"
unlink(fileXls, recursive = FALSE, force = FALSE)
exc <- loadWorkbook(fileXls, create = TRUE)
createSheet(exc,'Input')
saveWorkbook(exc)

Das Arbeitsblatt mit Daten befüllen

input <- data.frame('inputType'=c('Day','Month'),'inputValue'=c(2,5))
writeWorksheet(exc, input, sheet = "input", startRow = 1, startCol = 2)
saveWorkbook(exc)

BERT - Eine weitere Verbindung zwischen R und Excel

myFunction <- function(){
 aa <- rnorm(200)
 bb <- rnorm(200)
 res <- lm(aa~bb)$res
 return(res)
}

Das Paket readxl

install.packages("readxl")
library(readxl)

Präsentation von Daten - Reproducible Research

CRAN Taskview zu reproducible research

Resourcen

Word Dokumente mit R erstellen

Ein Markdown Dokument mit Rstudio erzeugen

Mein erstes mit R erzeugtes Word Dokument

Erstes Beispiel

Das Arbeiten mit Markdown

Rmarkdown - erste Schritte

Markdown ist eine sehr einfache Syntax, die es Benutzern erlaubt, aus einfachen Textdateien gut gelayoutete Dokumente zu erstellen.

**fettes Beispiel**
*kursives Beispiel*
~~durchgestrichen~~
- Aufzählungspunkt

fettes Beispiel

kursives Beispiel

durchgestrichen

Weitere Markdown Befehle

### Überschrift Ebene 3
#### Überschrift Ebene 4
[Meine Github Seite](https://github.com/Japhilko)

Überschrift Ebene 3

Überschrift Ebene 4

Meine Github Seite

Weitere Markdown Befehle

![BSP](http://e-scientifics.de/content/example_kinderbild.jpg)
![BSP 2](figure/example.png)

Chunks - Erste Schritte

Button um Chunks einzufügen

Inline Code

n=100

Ein inline Codeblock: 100

Chunk Optionen

Argument Beschreibung
eval Soll Rcode evaluiert werden?
warning Sollen Warnings angezeigt werden?
cache Soll der Output gespeichert werden?

Optionen

Optionen für Word Output

Code Hervorhebung

Das Paket knitr

install.packages("knitr")
library("knitr")

Eine Tabelle mit kable erzeugen

a <- runif(10)
b <- rnorm(10)
ab <- cbind(a,b)
kable(ab)
a b
0.4595360 -1.0480982
0.1212409 0.5099393
0.9461977 0.1667781
0.4661135 0.2633298
0.3865641 -0.3851828
0.8202662 -0.7292391
0.9891585 -0.3318638
0.0486718 -0.8682303
0.2026470 -0.9199542
0.9157137 1.0837656

Vorlagen verwenden

  1. Ein Word Dokument mit Rmarkdown erstellen
  2. Das Dokument in Word öffnen und Format verändern
  3. Vorlage als Referenz angeben

Resourcen

PDF Dokumente und Präsentationen mit LaTeX, Beamer und Sweave

Präsentationen mit Rmarkdown - beamer Präsentationen

Beamer Optionen

Beamer Themen

Chunks einfügen

Ergebnis - Cache

Wie man das im Header des Dokuments angibt

---
title: "Intro - Erste Schritte"
author: "Jan-Philipp Kolb"
date: "10 April 2017"
output:
  beamer_presentation: 
    colortheme: beaver
    theme: CambridgeUS
---

Inhaltsverzeichnis I

Inhaltsverzeichnis II

output: 
  beamer_presentation: 
    toc: yes

Optionen für die Graphikeinbindung

Präsentationen mit Sweave

Sweave Präsentation

Chunks bei Sweave

Chunk Optionen

Inline Code

\Sexpr{}

Inline Code - das Ergebnis

PDF Paper mit R

Jabref

Referenz mit R bekommen

install.packages("RMySQL")
citation("RMySQL")
## 
## To cite package 'RMySQL' in publications use:
## 
##   Jeroen Ooms, David James, Saikat DebRoy, Hadley Wickham and
##   Jeffrey Horner (2017). RMySQL: Database Interface and 'MySQL'
##   Driver for R. R package version 0.10.11.
##   https://CRAN.R-project.org/package=RMySQL
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {RMySQL: Database Interface and 'MySQL' Driver for R},
##     author = {Jeroen Ooms and David James and Saikat DebRoy and Hadley Wickham and Jeffrey Horner},
##     year = {2017},
##     note = {R package version 0.10.11},
##     url = {https://CRAN.R-project.org/package=RMySQL},
##   }

Das bibtex file einbinden I

Das bibtex file einbinden II

---
title: "R Schnittstellen"
author: "Jan-Philipp Kolb"
date: "21 April 2017"
output: 
  pdf_document: default
bibliography: Rschnittstellen.bib
---

Das Ergebnis

HTML Dokumente, Präsentationen und Dashboards mit Rmarkdown

Präsentationen - Rpres der einfachste Weg

Eine erste Präsentation

Erste Daten eintragen

date()
## [1] "Sat May 06 00:36:37 2017"

Eine Folie mit Formel

$$
\begin{equation}\label{eq2}
t_{i}=\sum\limits_{k=1}^{M_{i}}{y_{ik}}=M_{i}\bar{Y}_{i}. 
\end{equation}
$$

Zwei Spalten

Folie mit zwei Spalten
====================================
Erste Spalte
***
Zweite Spalte

Folienübergänge

transition: rotate

Weitere mögliche Folienübergänge

Folientypen

Ein neues Kapitel einfügen
====================================
type: section
Anderer Folientyp
====================================
type: prompt
Noch ein anderer Folientyp
====================================
type: alert

Die Schriftart wechseln

Meine Präsentation
========================================
author: Jan-Philipp Kolb
font-family: 'Impact'

Schrifttypen können auch importiert werden

Meine Präsentation
========================================
author: Jan-Philipp Kolb
font-import: http://fonts.googleapis.com/css?family=Risque
font-family: 'Risque'

Kleineren Text

Normale Schriftgröße

<small>This sentence will appear smaller.</small>

Die Präsentation anschauen

http://rpubs.com/Japhilko82/FirstRpubs

Eine ioslides Präsentation

Eine ioslides Präsentation

ioslides - Der Start

Weitere Dinge tun

![picture of spaghetti](images/spaghetti.jpg)

Ein Logo hinzu

---
title: "ioslides Beispiel"
author: "Jan-Philipp Kolb"
date: "20 April 2017"
output: 
  ioslides_presentation:
    logo: figure/Rlogo.png
---

Tabellen

library(knitr)
a <- data.frame(a=1:10,b=10:1)
kable(table(a))
1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0

knitr Engines

Eine slidy Präsentation

slidy Präsentationen

Was sind Cascading Style Files ([CSS](https://en.wikipedia.org/wiki/Cascading_Style_Sheets))?

CSS und R

Beispiel CSS

Das CSS ändern

Um den Präsentationstyp zu ändern kann man das CSS verändern

HTML Dokumente

Ein HTML Dokument erzeugen

Ein Template verwenden

Weitere Vorlagen nutzen

install.packages("rticles")

Vorlagen für Markdown

Das Paket rmdformats - HTML Output Formats and Templates for ‘rmarkdown’

install.packages("rmdformats")
install.packages("ProjectTemplate")
install.packages("tufte")

Beispiele für Templates

Dashboards

Beispiel R-Pakete

Paket installieren

install.packages("flexdashboard", type = "source")

Ein Dashboard erstellen mit Rstudio

Mein erstes Dashboard

Gallerie

Notebooks zur Integration von anderen Programmiersprachen (Python,LaTeX,Julia)

Notebooks

Rnotebooks

Ein Rnotebook anlegen

Rnotebook - erste Schritte

Python Code integrieren

import sys
print(sys.version)
## 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]

LaTeX Code integieren

Notebook veröffentlichen I

Notebook veröffentlichen II

Andere Notebooks

Jupyter Notebook

jupyter notebook

Start Jupyter Notebook

Beispiel Eingabe Code

Beaker Notebook

Beaker Notebook

Beaker starten

Aufgabe: Bearbeiten Sie ein Notebook weiter

Interaktive Karten mit dem Javascript Paket leaflet

Die Daten - Weltkulturerbe

url <- "https://raw.githubusercontent.com/Japhilko/
GeoData/master/2015/data/whcSites.csv"

whcSites <- read.csv(url) 
whcSitesDat <- with(whcSites,data.frame(name_en,
                                        category))
library(knitr)
kable(head(whcSitesDat))
name_en category
Cultural Landscape and Archaeological Remains of the Bamiyan Valley Cultural
Minaret and Archaeological Remains of Jam Cultural
Historic Centres of Berat and Gjirokastra Cultural
Butrint Cultural
Al Qal’a of Beni Hammad Cultural
M’Zab Valley Cultural

Das Paket DT

install.packages("DT")

Weitere Variablen WHC Datensatz

whcSitesDat2 <- with(whcSites,data.frame(name_en,category,longitude,latitude,date_inscribed,area_hectares,danger_list))
library('DT')
datatable(whcSitesDat2)

Das Ergebnis bei Rpubs

http://rpubs.com/Japhilko82/WHCdata

Das Paket magrittr

install.packages("magrittr")
library("magrittr")

Die Pipes nutzen

library(magrittr)

str1 <- "Hallo Welt"
str1 %>% substr(1,5)
## [1] "Hallo"
str1 %>% substr(1,5) %>% toupper()
## [1] "HALLO"

Das Paket leaflet

install.packages("leaflet")
library("leaflet")

Eine interaktive Karte erstellen

m <- leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=whcSites$lon, 
             lat=whcSites$lat, 
             popup=whcSites$name_en)
m

Die Karte zeigen

Farbe hinzu

whcSites$color <- "red"
whcSites$color[whcSites$category=="Cultural"] <- "blue"
whcSites$color[whcSites$category=="Mixed"] <- "orange"

Eine Karte mit Farbe erzeugen

m1 <- leaflet() %>%
  addTiles() %>%  
  addCircles(lng=whcSites$lon, 
             lat=whcSites$lat, 
             popup=whcSites$name_en,
             color=whcSites$color)

Die Karte mit mehr Farbe

Weltkulturerbe

Weltkulturerbe

Die Karte abspeichern

Layers ein- und ausblenden

m2 <- leaflet() %>%
  addTiles(group = "OSM (default)") %>%  
  addProviderTiles("Stamen.Toner", group = "Toner") %>%
  addProviderTiles("Stamen.TonerLite", group = "Toner Lite") %>%

  addCircles(lng=whcSites$lon, 
             lat=whcSites$lat, 
             popup=whcSites$name_en) %>% 
  
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Toner Lite"),
    options = layersControlOptions(collapsed = FALSE)
  )
m2

Ein weiteres Beispiel mit Erdbebendaten

outline <- quakes[chull(quakes$long, quakes$lat),]
map <- leaflet(quakes) %>%
  # Base groups
  addTiles(group = "OSM (default)") %>%
  addProviderTiles("Stamen.Toner", group = "Toner") %>%
  addProviderTiles("Stamen.TonerLite", group = "Toner Lite") %>%
  # Overlay groups
  addCircles(~long, ~lat, ~10^mag/5, stroke = F, group = "Quakes") %>%
  addPolygons(data = outline, lng = ~long, lat = ~lat,
    fill = F, weight = 2, color = "#FFFFCC", group = "Outline") %>%
  # Layers control
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Toner Lite"),
    overlayGroups = c("Quakes", "Outline"),
    options = layersControlOptions(collapsed = FALSE)
  )
map

Karte mit Polygonen erzeugen

library(sp)
Sr1 = Polygon(cbind(c(2, 4, 4, 1, 2), c(2, 3, 5, 4, 2)))
Sr2 = Polygon(cbind(c(5, 4, 2, 5), c(2, 3, 2, 2)))
Sr3 = Polygon(cbind(c(4, 4, 5, 10, 4), c(5, 3, 2, 5, 5)))
Sr4 = Polygon(cbind(c(5, 6, 6, 5, 5), c(4, 4, 3, 3, 4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr4, Sr3), "s3/4")
SpP = SpatialPolygons(list(Srs1, Srs2, Srs3), 1:3)
leaflet(height = "300px") %>% addPolygons(data = SpP)

Beispiel US Staaten

library(maps)
mapStates = map("state", fill = TRUE, plot = FALSE)
leaflet(data = mapStates) %>% addTiles() %>%
  addPolygons(fillColor = topo.colors(10, alpha = NULL), stroke = FALSE)

Die Basiskarte ändern

m <- leaflet() %>% setView(lng = -71.0589, lat = 42.3601, zoom = 12)
m %>% addTiles()
m %>% addProviderTiles("Stamen.Toner")

Basiskarte - CartoDB

m %>% addProviderTiles("CartoDB.Positron")

Esri.NatGeoWorldMap

m %>% addProviderTiles("Esri.NatGeoWorldMap")

OpenTopoMap

m %>% addProviderTiles("OpenTopoMap")

Thunderforest.OpenCycleMap

m %>% addProviderTiles("Thunderforest.OpenCycleMap")

WMS Tiles hinzufügen

leaflet() %>% addTiles() %>% setView(-93.65, 42.0285, zoom = 4) %>%
  addWMSTiles(
    "http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi",
    layers = "nexrad-n0r-900913",
    options = WMSTileOptions(format = "image/png", transparent = TRUE),
    attribution = "Weather data © 2012 IEM Nexrad"
  )

Mehrere Layer miteinander kombinieren

m %>% addProviderTiles("MtbMap") %>%
  addProviderTiles("Stamen.TonerLines",
    options = providerTileOptions(opacity = 0.35)) %>%
  addProviderTiles("Stamen.TonerLabels")

Andere Marker benutzen

greenLeafIcon <- makeIcon(
  iconUrl = "http://leafletjs.com/examples/custom-icons/leaf-green.png",
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94,
  shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png",
  shadowWidth = 50, shadowHeight = 64,
  shadowAnchorX = 4, shadowAnchorY = 62
)

leaflet(data = quakes[1:4,]) %>% addTiles() %>%
  addMarkers(~long, ~lat, icon = greenLeafIcon)

Cluster Optionen für Marker

leaflet(quakes) %>% addTiles() %>% addMarkers(
  clusterOptions = markerClusterOptions()
)

Ein Rechteck hinzufügen

leaflet() %>% addTiles() %>%
  addRectangles(
    lng1=-118.456554, lat1=34.078039,
    lng2=-118.436383, lat2=34.062717,
    fillColor = "transparent"
  )